package com.itheima.aop;


import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

/**
 * 使用AOP完成Service层性能监测切面类
 */
@Slf4j
//@Aspect //表示类是一个Aop的切面类
//@Component //表示将类交给Ioc容器
public class TimeAspect {

    @SneakyThrows
    @Around("execution(public * com.itheima.service.impl.*.*(..))") //需要传入要增强的哪些类的哪些方法
    public Object around(ProceedingJoinPoint pjp) {//pjp正在处理的连接点，就是切入点
        //开始时间
        long start = System.currentTimeMillis();

        //使用pjp来执行原始的方法功能
        Object res = pjp.proceed();

        //结束时间
        long end = System.currentTimeMillis();
        log.info("{} 方法执行耗时：{} ms", pjp.getSignature().getName(), end - start);

        return res;
    }
}
